<template>
<div>
  <van-nav-bar title="黑马头条-登录" />
  <!-- 使用第三方组件的方式
  1.在文档中找到这个组件（对文档足够熟悉）
  2.将组建引入到项目中（全局引入，按需引入）
  3.找到对应的实例将代码复制到项目中
  4.对代码进行修改，根据文档中的api等 -->

  <van-form @submit="onSubmit">
    <!-- 正则表达式是以/开头/结尾
    想要匹配开头需要使用^
    想要匹配结尾使用$
    想要匹配数字使用\d
    想要匹配几到几的数字使用[0-9]
    想要匹配几个{5}
    /^1[3-9]\d{9}$/
    常见的正则有哪些？
    正则校验手机号
    密码（数字、大小写字母、符号）
    邮箱的验证：[a-zA-Z0-9]+([-_.][A-Za-zd]+)*@([a-zA-Z0-9]+[-.])+[A-Za-zd]{2,5}$
    -->
  <van-field
    v-model="formLogin.mobile"
    name="手机号"
    label="手机号"
    placeholder="请输入手机号"
    type="tel"
    required
    :rules="[{ required: true, message: '请输入正确的手机号',trigger: 'onChange', pattern: /^1[3-9]\d{9}$/ }]"
  />
  <van-field
    v-model="formLogin.code"
    type="password"
    name="密码"
    label="密码"
    placeholder="请输入密码"
    required
    :rules="[{ required: true, message: '请填写密码',trigger: 'onChange', pattern: /^\d{6}$/ }]"
  />
  <div style="margin: 16px;">
    <!-- 当使用组件的自定义属性，
    如果前面加上冒号，说明属性绑定的是一个表达式（变量，方法，表达式），
    如果不加冒号，绑定的是一个字符串 -->
    <van-button round block type="info" native-type="submit" :loading="isLoding" :disabled="isLoding">提交</van-button>
  </div>
</van-form>
</div>
</template>

<script>
import { mapActions } from 'vuex'
import { Notify } from 'vant'
export default {
  name: 'Login',
  data () {
    return {
      formLogin: {
        mobile: '13888888888',
        code: '246810' // 默认密码 一般不用改
      },
      isLoding: false
    }
  },
  methods: {
    ...mapActions(['asyncLoginAction']),
    async onSubmit (values) {
      this.isLoding = true
      // 调用接口的步骤：
      // 1.引入借口
      // 2.在方法中调用接口
      // 3.调用接口是如果需要传参数 需要将参数整理传入保证参数的数据类型和数据格式符合后端的需要
      // 4.定义变量接受返回值
      try {
        await this.asyncLoginAction(this.formLogin)
        Notify({ type: 'success', message: '登录成功' })
        // 写法一：
        /* this.$router.replace({
          path: '/layout'
        }) */
        // 写法二：
        this.$router.replace('/layout')
        // 路由跳转的方法有两个：
        // this.$router.replace 不可以回退，相当于路由的重置，没有历史记录
        // this.$router.push 可以回退，有路由的历史记录

        this.isLoding = false
      } catch (err) {
        Notify({ type: 'warning', message: '手机号或密码错误' })
        this.isLoding = false
      }
    }
  }
}
</script>

<style lang="less" scoped>
// 如果组件直接引入并且组件上带有class 可以直接使用这个class改变组件的样式
// .van-nav-bar {
//   background-color: #057cff;
// }
// // 如果我想改变引入组件的里面的dom上的样式，直接使用class是不生效的
// // 原因是因为组件上使用了scoped 在打包过程中会给dom添加个雷用作样式的隔离
// // 可以通过在类名前面加上/deep/ 实现类名穿透改变子组件的样式
// /deep/ .van-nav-bar__title {
//   color: #fff;
// }
// 预处理器不同使用的穿透符也有所不同scss ::deep  styles >>>
</style>
